package com.hospital.service.impl;

import com.github.pagehelper.PageInfo;
import com.hospital.dao.DoctorDao;
import com.hospital.entity.Doctor;
import com.hospital.service.DoctorService;
import com.hospital.vo.ResponseVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;

/**
 * 医生接口实现类
 * @author coder_zzm
 * @date 2022/5/13 23:41
 */
@Slf4j
@Service
public class DoctorServiceImpl implements DoctorService {

    @Resource
    private DoctorDao doctorDao;

    /**
     * 获取所有医生信息
     * @param pageNum 页码
     * @param pageSize 每页显示数量
     * @return 医生信息列表
     */
    @Override
    public ResponseVO getAllAndPage(Integer pageNum, Integer pageSize) {
        log.info("业务层获取所有医生信息");
        List<Doctor> doctors = doctorDao.getAllAndPage(pageNum, pageSize);

        // 通过 pageHelper 工具类实现自定义分页
        PageInfo<Doctor> pageInfo = new PageInfo<>(doctors);
        return ResponseVO.buildSuccessInstance(pageInfo);
    }

    /**
     * 查询医生详细信息
     * @param dId 医生编号
     * @return 医生详细信息
     */
    @Override
    public ResponseVO getDoctorDetail(String dId) {
        log.info("业务层获取医生单条信息");
        Doctor doctor = doctorDao.getDoctorDetail(dId);
        if (doctor != null) {
            return ResponseVO.buildSuccessInstance(doctor);
        }
        return ResponseVO.buildSuccessInstance(ResponseVO.NULL_RESULT);
    }

    /**
     * 添加医生信息
     * @param doctor 医生实体类
     * @return 医生信息是否添加成功
     */
    @Override
    public ResponseVO addDoctor(Doctor doctor) {
        log.info("业务层添加医生信息");
        Integer result = doctorDao.addDoctor(doctor);
        if (result > 0) {
            return ResponseVO.buildSuccessInstance(ResponseVO.RESP_SUCCESS);
        }
        return ResponseVO.buildSuccessInstance(ResponseVO.UPDATE_FAIL);
    }

    /**
     * 根据医生编号删除医生信息
     * @param dId 医生编号
     * @return 受影响行数
     */
    @Override
    public ResponseVO delDoctorGetById(Integer dId) {
        log.info("业务层删除医生信息");
        Integer row = doctorDao.delDoctorGetById(dId);
        if (row > 0) {
            return ResponseVO.buildSuccessInstance(ResponseVO.RESP_SUCCESS, row);
        }
        return ResponseVO.buildSuccessInstance(ResponseVO.UPDATE_FAIL, 0);
    }

    /**
     * 根据医生编号修改医生信息
     * @param doctor 医生实体类
     * @return 医生信息是否修改成功
     */
    @Override
    public ResponseVO updateDoctor(Doctor doctor) {
        log.info("业务层修改医生信息");
        Integer result = doctorDao.updateDoctor(doctor);
        if (result > 0) {
            return ResponseVO.buildSuccessInstance(ResponseVO.RESP_SUCCESS);
        }
        return ResponseVO.buildSuccessInstance(ResponseVO.UPDATE_FAIL);
    }

    /**
     * 根据时间查询最后一条记录方法
     * @return 单条记录
     */
    @Override
    public Doctor getLastDoctor() {
        log.info("业务层查询最后一条记录");
        return doctorDao.getLastDoctor();
    }

    /**
     * 根据医生姓名查询信息方法
     * @param dName 医生姓名
     * @return 多条记录
     */
    @Override
    public List<Doctor> getDoctorByName(String dName) {
        log.info("业务层根据医生姓名查询信息");
        return doctorDao.getDoctorByName(dName);
    }
}
